#include<bits/stdc++.h>
#define int unsigned long long 
using namespace std;

const int maxn=1e6+10;
const int base=131;

int h[maxn], bs[maxn];
char s[maxn];

// 获取一段区间的 hash值
int getHash(int l ,int r){
	return h[r]-h[l-1]*bs[r-l+1];
}

void solve(){
	cin>>(s+1);
	int n=strlen(s+1);
	// 先处理出 base 数组
	bs[0]=1;
	for (int i=1;i<=n;i++) {
		bs[i]=bs[i-1]*base;
		h[i]=h[i-1]*base+s[i];
	}
	
	int ans=0;
	for (int i=1;i<=n;i++) { // 枚举出来 个数
		int flag = true;
		int len=n/i; // 表示每段的长度
		if (n%i != 0) { // 每段长度不一样当然不行
			continue;
		}
		// 判断出每段的 hash 值是否都一样
		// 先取出第一段的值
		int val=getHash(1, len);
		for (int j=len+1;j+len-1<=n;j+=len) {
			if (getHash(j, j+len-1) != val) {
				// 不一样
				flag=false;
				break;
			}
		}
		if (flag) {
			// 满足条件
			ans=i;
		}
	}
	
	cout << ans <<'\n';	
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
